package com.myjoje.base;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;

/**
 * 只依赖jdk的工具类
 */
public class BaseUtil {
    /*格式化日期*/
    public static final String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";

    //////////////////////////////////////日期相关/////////////////////////////////

    /**
     * 获取日期时间
     */
    public static String getDateTime() {
        LocalDateTime now = LocalDateTime.now();
        return now.format(DateTimeFormatter.ofPattern(FORMAT_DATE_TIME));
    }

    /**
     * 获取当前年份
     */
    public static String getYear() {
        return String.valueOf(LocalDate.now().getYear());
    }

    /**
     * 获取当前月份
     */
    public static String getMonth() {
        return String.valueOf(LocalDate.now().getMonthValue());
    }

    /**
     * 获取当前日期
     */
    public static String getDay() {
        return String.valueOf(LocalDate.now().getDayOfMonth());
    }


    /**
     * is empty
     */
    public static boolean isEmpty(CharSequence cs) {
        return cs == null || cs.length() == 0;
    }

    public static boolean isNotEmpty(CharSequence cs) {
        return !isEmpty(cs);
    }

    /**
     * 求和
     *
     * @param scale  小数精度，null保留两位小数
     * @param values 值
     */
    public static String sum(Integer scale, String... values) {
        BigDecimal sum = BigDecimal.ZERO;
        for (String value : values) {
            if (isEmpty(value)) {
                value = "0";
            }
            try {
                sum = sum.add(new BigDecimal(value));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return sum.setScale(null == scale ? 2 : scale, RoundingMode.HALF_UP).toString();
    }

    /**
     * 比较数值字符串是否相同
     */
    public static Boolean isSameValue(String value1, String value2) {
        if (value1.equals(value2)) {
            return true;
        } else {
            return new BigDecimal(value1).compareTo(new BigDecimal(value2)) == 0;
        }
    }

    /**
     * 减法
     *
     * @param value       被减数
     * @param subtrahends 减数
     * @return
     */
    public static String subtract(Integer scale, String value, String... subtrahends) {
        value = isEmpty(value) ? "0" : value;
        try {
            BigDecimal val = new BigDecimal(value);
            for (String subtrahend : subtrahends) {
                if (isNotEmpty(subtrahend)) {
                    val = val.subtract(new BigDecimal(subtrahend));
                }
            }
            return val.setScale(null == scale ? 2 : scale, RoundingMode.HALF_UP).toString();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("value is not a number");
        }
    }

    /**
     * 获取参数
     *
     * @param key   键
     * @param value 值
     */
    public static Map getMap(String key, Object value) {
        return new HashMap() {
            {
                put(key, value);
            }
        };

    }

    /**
     * 根据key获取Map的Value，key不存在返回"";
     */
    public static Object getMapValue(Map map, String key) {
        return Optional.ofNullable(map).map(obj -> obj.get(key)).orElse("");
    }


    /**
     * 获取32位UUID
     */
    public static String get32UUID() {
        return UUID.randomUUID().toString().trim().replaceAll("-", "");
    }

    /**
     * 获取文件后缀名
     */
    public static String getFileSuffixName(String filename) {
        if (filename.length() > 1) {
            return filename.substring(filename.lastIndexOf("."));
        }
        return "";
    }

}
